package models

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/guregu/null"
	"gorm.io/gorm"
)

type Comment struct {
	gorm.Model
	Id              int      `gorm:"column:id;" json:"id"`
	Type            null.Int `gorm:"column:type;default:0" json:"type"`
	ArticleId       int      `gorm:"column:article_id;" json:"articleId"`
	RootId          int      `gorm:"column:root_id;default:-1" json:"rootId"`
	Content         string   `gorm:"column:content;" json:"content"`
	ToCommentUserId int      `gorm:"column:to_comment_user_id;default:-1" json:"toCommentUserId"`
	ToCommentId     int      `gorm:"column:to_comment_id;default:-1" json:"toCommentId"`
	CreateBy        int      `gorm:"column:create_by;" json:"createBy"`
	UpdateBy        int      `gorm:"column:update_by;" json:"updateBy"`
}
type CommentVo struct {
	gorm.Model
	Id              int      `gorm:"column:id;" json:"id"`
	Type            null.Int `gorm:"column:type;default:0" json:"type"`
	ArticleId       int      `gorm:"column:article_id;" json:"articleId"`
	RootId          int      `gorm:"column:root_id;default:-1" json:"rootId"`
	Content         string   `gorm:"column:content;" json:"content"`
	ToCommentUserId int      `gorm:"column:to_comment_user_id;default:-1" json:"toCommentUserId"`
	ToCommentId     int      `gorm:"column:to_comment_id;default:-1" json:"toCommentId"`
	CreateTime      MyTime   `gorm:"column:created_at;" json:"createTime"`
	CreateBy        int      `gorm:"column:create_by;" json:"createBy"`
	UpdateBy        int      `gorm:"column:update_by;" json:"updateBy"`
}

func (Comment) TableName() string {
	return "sg_comment"
}
func (CommentVo) TableName() string {
	return "sg_comment"
}
func (c *Comment) BeforeCreate(tx *gorm.DB) error {
	if tx.Statement.Context != nil {
		fmt.Println("context is not nil")
		ctx := tx.Statement.Context
		if ginCtx, ok := ctx.(*gin.Context); ok {
			userId, exists := ginCtx.Get("userId")
			if exists {
				fmt.Println("userId:", userId)
				c.CreateBy = userId.(int)
				c.UpdateBy = userId.(int)
			}
		}
	}
	return nil
}
